import {
  Module,
  NestModule,
  RequestMethod,
  MiddlewareConsumer,
} from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './common/middleware/logger.middleware';

import { CatsController } from './cats/cats.controller';

import { DogModule } from './dog/dog.module';
import { DogController } from './dog/dog.controller';

// import { ConfigModule } from '@nestjs/config';

@Module({
  // 导出此模块所需的提供程序的导入模块列表
  imports: [DogModule],
  // 这个模块提供的 providers 的子集应该在导入这个模块的其他模块中可用。你可以使用提供者本身或仅使用其令牌（provide 值）
  exports: [],
  // 此模块中定义的必须实例化的控制器集
  controllers: [AppController, CatsController],
  // 将由 Nest 注入器实例化并且至少可以在该模块中共享的提供程序
  providers: [AppService],
})

export class AppModule {}

// export class AppModule implements NestModule {
//   configure(consumer: MiddlewareConsumer) {
//     consumer
//       .apply(LoggerMiddleware)
//       // .forRoutes({ path: 'dog/*', method: RequestMethod.GET }); // 单个'dog', { path: 'dog }
//       .forRoutes(DogController);
//   }
// }
